import { defineConfig , loadEnv } from 'vite'
import path from 'path'
import vue from '@vitejs/plugin-vue'
import { viteMockServe } from 'vite-plugin-mock'
import { visualizer } from 'rollup-plugin-visualizer'

export default defineConfig(({command, mode }) => {
  // 获取.env文件里定义的环境变量
  const env = loadEnv(mode, process.cwd());
  //console.log(env);   //变量在命令行里打印出来
  //.env文件中的环境变量必须以VITE_为前缀，否则无法引用成功
  const { VITE_ENV } = env;
  return {
    define:{
      'process.env':env
    },
    plugins: [
      vue(),
      //试图性能分析工具
      // visualizer({
      //   emitFile:false,
      //   // filename:'stats.html',
      //   open:true,
      //   sourcemap:true
      // }),
      //mock假数据工具
      viteMockServe({
        mockPath:'./src/mock', //mock文件路径
        localEnabled: command === 'serve', //是否在开发阶段使用
        prodEnabled:false, //生产环境下为false，就不会打包到生产包中
      })
    ],

    //项目部署在主域名的子文件使用,例如http://localhost:3000/myvite/。不填默认就是/
    base: env.VITE_APP_BASE_URL,
    resolve: {
      alias: {
        //别名配置
        // "~": path.resolve(__dirname, "./"), //配置的别名
        "@": path.resolve(__dirname, "src"),
      },
      //共享配置 https://cn.vitejs.dev/config/shared-options.html#resolve-extensions
      extensions : ['.mjs', '.js', '.mts', '.ts', '.jsx', '.tsx', '.json','.vue']
    },
    server: {
      port: 8000,//端口
      // host: "localhost",//ip地址例如192.168.1.177
      host:'localhost',
      open: false,//服务启动时自动在浏览器中打开应用
      cors:true,//允许跨域
      // middlewareMode: true,
      // 反向代理配置
      proxy: { //配置多个代理
        [env.VITE_APP_BASE_API]: {
          target: env.VITE_APP_BASE_URL,
          changeOrigin: true,///设置访问目标地址允许跨域
          secure:true, //是否支持https
          rewrite: (p) => p.replace(RegExp(`^${env.VITE_APP_BASE_API}`), '')
        },
      }
    },
    build: {
      // target: 'es2015', // 使用现代JavaScript特性
      outDir: 'dist',
      assetsDir: 'assets',
      rollupOptions: {
        output: {
          sourcemap:true,
          chunkFileNames:'static/js/[name]-[hash].js',
          entryFileNames:'static/js/[name]-[hash].js',
          assetFileNames:'static/[ext]/[name]-[hash].[ext]',
          manualChunks:id => {
            if(id.includes('node_modules')){
              return 'vendor';
            }
          }
        },
      },
    },
    // 通过terser插件进行代码压缩
    minify: 'terser',
    terserOptions: {
      compress: {
        drop_console: true,
        drop_debugger: true,
      },
    },
    // postCss 共享配置
    css: {
      // preprocessorOptions: {
      //   scss: {
      //     additionalData: '@import "@/styles/base.scss"',
      //   }
      // },
      // postcss: {
      //   plugins: [//扩展插件
      //         {
      //           postcssPlugin: 'internal:charset-removal',
      //           AtRule: {//大写AtRule
      //             charset: (atRule) => {
      //             //char set字符集
      //               if (atRule.name === 'charset') {
      //                 atRule.remove();//删除
      //               }
      //             }
      //           }
      //         }
      //     ]
      // },
    },


  }
  
})
